#ifndef __APP_MODBUS_H__
#define __APP_MODBUS_H__

#define _GNU_SOURCE
#include <unistd.h>
#include <modbus/modbus.h>
#include "log.h"
#include <errno.h>
/**
 * @brief modbus 初始化
 * 
 * @param filename 串口文件路径
 * @return int 0 成功，-1 失败
 */
int app_modbus_init(char *filename);
/**
 * @brief modbus 关闭
 * 
 */
void app_modbus_close(void);
/**
 * @brief 读取多个输入寄存器数据
 * 
 * @param device_id 设备ID
 * @param reg_addr 寄存器地址
 * @param reg_num 寄存器数量
 * @param data_buf 读取数据缓存
 * @return int 0 读取成功，-1 读取失败
 */
int app_modbus_readInputregs(int device_id, int reg_addr, int reg_num, uint16_t *data_buf);
/**
 * @brief 写入多个保持寄存器数据
 * 
 * @param device_id 设备ID
 * @param reg_addr 寄存器地址
 * @param reg_num 寄存器数量
 * @param data 写入的数据
 * @return int 0 写入成功，-1 写入失败
 */
int app_modbus_writeHoldRegs(int device_id, int reg_addr, int reg_num, uint16_t *data);
/**
 * @brief 读取多个线圈数据
 * 
 * @param device_id 设备ID
 * @param coil_addr 线圈地址
 * @param coil_num 线圈数量
 * @param data_buf 读取数据缓存
 * @return int 0 读取成功，-1 读取失败
 */
int app_modbus_readCoils(int device_id, int coil_addr, int coil_num, uint8_t *data_buf);
/**
 * @brief 写入多个线圈数据
 * 
 * @param device_id 设备ID
 * @param coil_addr 线圈地址
 * @param coil_num 线圈数量
 * @param data 写入的数据
 * @return int 0 写入成功，-1 写入失败
 */
int app_modbus_writeCoils(int device_id, int coil_addr, int coil_num, uint8_t *data);

#endif
